#ifndef _CANARY2_CORO_NORMAL_AWAKER_H_
#define _CANARY2_CORO_NORMAL_AWAKER_H_

#include "../sys/thread_pool.h"
#include "../sys/task_manager.h"

namespace wilson::coro
{
    class normal_awaker
    {
    public:
        normal_awaker(::std::coroutine_handle<> h)
            : na_coro{ h }
        {
        }

        normal_awaker(const normal_awaker& other)
            : na_coro{ other.na_coro }
        {
        }

        void awake()
        {
            wilson::sys::schedule(
                *wilson::sys::normal_task_mgr::get_from_global(), 
                na_coro
            );
        }

    private:
        ::std::coroutine_handle<> na_coro{};
    };
}

#endif
